/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sgct.Cadastrado;

import Controle.Controle;
import com.sun.rave.faces.data.DefaultTableDataModel;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Hyperlink;
import com.sun.webui.jsf.component.Tab;
import com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.component.Upload;
import com.sun.webui.jsf.model.UploadedFile;
import java.io.File;
import javax.servlet.ServletContext;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version AreaCadastrado.java
 * @version Created on 30/05/2009, 09:04:35
 * @author clock
 */

public class AreaCadastrado extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */

    private void _init() throws Exception {
    }
    private Upload fileUpload = new Upload();

    public Upload getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(Upload u) {
        this.fileUpload = u;
    }
    private Tab tab2 = new Tab();

    public Tab getTab2() {
        return tab2;
    }

    public void setTab2(Tab t) {
        this.tab2 = t;
    }
    private TextField titulo = new TextField();

    public TextField getTitulo() {
        return titulo;
    }

    public void setTitulo(TextField tf) {
        this.titulo = tf;
    }
    private TextField assunto = new TextField();

    public TextField getAssunto() {
        return assunto;
    }

    public void setAssunto(TextField tf) {
        this.assunto = tf;
    }
    private Hyperlink download = new Hyperlink();

    public Hyperlink getDownload() {
        return download;
    }

    public void setDownload(Hyperlink h) {
        this.download = h;
    }
    private DefaultTableDataModel dataTable1Model = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable1Model() {
        return dataTable1Model;
    }

    public void setDataTable1Model(DefaultTableDataModel dtdm) {
        this.dataTable1Model = dtdm;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public AreaCadastrado() {
    }

    /**
     * <p>Método de retorno de chamada que é chamado sempre que uma página é navegada
     * diretamente, através de uma URL, ou indiretamente, através da navegação de página.
     * Personalize este método para adquirir recursos que serão necessários
     * para manipuladores de eventos e métodos de ciclo de vida, independentemente
     * de a página estar executando processamento "postback".</p>
     *
     * <p>Observe que, se a solicitação atual for um "postback", os valores
     * da propriedade dos componentes <strong>não</strong> representam quaisquer
     * valores enviados com essa solicitação.  Em vez disso, representam os
     * valores de propriedade que foram salvos para essa visualização quando foi renderizada.</p>
     */
    @Override
    public void init()
    {
        super.init();

        try {_init();}
        catch (Exception e) {}

        ServletContext theApplicationsServletContext = (ServletContext) getExternalContext().getContext();
      
        if(Controle.GetInstance().getUsuarioAtual().getArtigo() != null)
        {
            tab2.setVisible(true);            
        }
        else tab2.setVisible(false);


    }

    /**
     * <p>Método de retorno de chamada que é chamado depois de a árvore do componente ter sido
     * restaurada, mas Antes da ocorrência de qualquer processamento de evento.  Esse método
     * será chamado <strong>somente</strong> em uma solicitação "postback" que
     * esteja processando um envio de formulário.  Personalize esse método para alocar
     * recursos que serão necessários nos manipuladores de eventos.</p>
     */
    public void preprocess() {
    }

    /**
     * <p>Método de retorno de chamada que é chamado pouco antes da ocorrência da renderização.
     * Esse método será chamado <strong>somente</strong> para a página que será
     * renderizada (e não, por exemplo, em uma página que
     * manipulou um "postback" e em seguida navegou para uma outra página).  Personalize
     * esse método para alocar recursos que serão necessários para renderizar
     * esta página.</p>
     */
    public void prerender() {
    }

    /**
     * <p>Método de retorno de chamada que é chamado após a conclusão da renderização para
     * esta solicitação se <código>init()</código> foi chamado (independentemente
     * de esta página ter sido ou não a que foi realmente renderizada).  Personalize este
     * método para liberar recursos adquiridos nos métodos <código>init()</código>,
     * <código>preprocess()</código> ou <código>prerender()</código> (ou
     * adquiridos durante a execução de um manipulador de evento).</p>
     */
    @Override
    public void destroy() {
    }

 
    public String tab1_action() {
        // TODO: Substitua o código
        return null;
    }

    public String tab2_action() 
    {
        ServletContext theApplicationsServletContext = (ServletContext) getExternalContext().getContext();
        String DestinationPath = "/sgct/resources/artigosSubmetidos/" + Controle.GetInstance().getUsuarioAtual().getArtigo().GetTitle() + ".pdf";

        File tester = new File(DestinationPath);
        boolean arquivoExistente = tester.exists();

        download.setUrl(DestinationPath);

        return null;
    }

    /**
     *
     * @return
     */
    public String enviar_action()
    {
        UploadedFile uploadedFile = fileUpload.getUploadedFile();

        //Verifica se campo arquivo foi preenchido
        if( uploadedFile == null )  return "";

        //Verifica se campo titulo foi preenchido
        if(titulo.getText()==null || titulo.getText().toString().equals(""))
        {
            error("Digite o título do artigo!");
            return "";
        }

        //Verifica se campo assunto foi preenchido
        if(assunto.getText()==null || assunto.getText().toString().equals(""))
        {
            error("Digite o assunto do artigo!");
            return "";
        }

        if (fileUpload.getUploadedFile().getOriginalName().equals(""))
        {
            error("Escolha um artigo para submeter");
            return "";
        }

        String uploadedFileName = uploadedFile.getOriginalName();
        // Some browsers return complete path name, some don't
        // Make sure we only have the file name
        // First, try forward slash
        int index = uploadedFileName.lastIndexOf('/');
        String justFileName;
        if ( index >= 0) {
            justFileName = uploadedFileName.substring( index + 1 );
        }
        else
        {
            // Try backslash
            index = uploadedFileName.lastIndexOf('\\');
            if (index >= 0)
            {
                justFileName = uploadedFileName.substring( index + 1 );
            }
            else
            {
                // No forward or back slashes
                justFileName = uploadedFileName;
            }
        }

        String uploadedFileType = uploadedFile.getContentType();
        ServletContext theApplicationsServletContext = (ServletContext) this.getExternalContext().getContext();
        String DestinationPath = "";


        if(Controle.verificaExtensao(justFileName))
        {
            try
            {
                Controle.GetInstance().SubmeterArtigo(Controle.GetInstance().getUsuarioAtual().GetEmail(), titulo.getText().toString(), assunto.getText().toString());
                DestinationPath = theApplicationsServletContext.getRealPath("resources/artigosSubmetidos/"+titulo.getText().toString()+".pdf");
                File file = new File(DestinationPath);
                uploadedFile.write(file); //Escreve o artigo no diretorio
            }
            catch (Exception ex)
            {
                error("Falha na Submissao: " + ex.toString());
                info ("Impossivel carregar o arquivo: " + justFileName);
                return null;               
            }
        }
        else
        {            
            error("Falha na Submissao");
            info("Voce deve enviar um arquivo PDF");
            return null;
        }

        error("Arquivo Aceito");
        info("Artigo submetido com sucesso");
        tab2.setVisible(true);
        return null;
    }

    public String sair_action()
    {
        return "sair";
    }

    public String tab3_action() {
        // TODO: Substitua o código
        return null;
    }

    public String tab4_action() {
        // TODO: Substitua o código
        return null;
    }
}

